{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c6402481",
   "metadata": {},
   "source": [
    "# DTFT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f927a26c",
   "metadata": {},
   "source": [
    "求矩形序列x(n)=R_N (n)的N点DTFT，并画出其幅度谱函数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "43580c27",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#导入使用的库\n",
    "import numpy as np;from math import *\n",
    "import matplotlib.pyplot as plt;from matplotlib import ticker\n",
    "from matplotlib.ticker import MaxNLocator\n",
    "\n",
    "#定义矩形序列，设N=5\n",
    "N = 5;N0 = 51#序列长度\n",
    "rn = np.ones(N);N1 = int((N0-N)/2)\n",
    "xn = np.append(np.zeros(N1),rn)\n",
    "xn = np.append(xn,np.zeros(N1))\n",
    "\n",
    "#对矩形序列做DTFT\n",
    "n = np.arange(N0)-N1\n",
    "w = (np.arange(501)-int(501/2))*4*pi/500\n",
    "w = w.reshape(-1,1) #将w(n)转为一列\n",
    "xe = np.dot(np.exp(-1j*n*w),xn)\n",
    "\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei'   #使图形中的中文正常编码显示\n",
    "plt.rcParams['axes.unicode_minus'] = False   #使坐标轴刻度表签正常显示正负号\n",
    "\n",
    "#绘制矩形序列及其幅度谱函数\n",
    "fig,axs = plt.subplots(2,1,constrained_layout=True)\n",
    "axs[0].stem(n,xn,basefmt=\"\");axs[1].plot(w/pi,np.abs(xe))\n",
    "axs[0].set_title('矩形序列的x(n)');axs[0].set_xlabel('n')\n",
    "axs[1].set_title('矩形序列的幅度谱函数');axs[1].grid()\n",
    "axs[1].set_xlabel(r'$ \\omega / \\pi $')\n",
    "axs[1].set_ylabel(r'$ |X( e^{j \\omega} )| $')\n",
    "axs[0].set_ylim([0,1.5]);axs[1].set_ylim([0,5])\n",
    "axs[1].xaxis.set_major_locator(MaxNLocator(11))\n",
    "axs[1].yaxis.set_major_locator(MaxNLocator(5))\n",
    "plt.show();fig.savefig('./dtft.png',dpi=500)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "71e8a02a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
